﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Intelsi.Entity;
using Microsoft.Practices.Unity;

namespace Intelsi.DataAcces
{
    public class EntradaProductosDAO: MasterDataAccess, IEntradaProductosDAO
    {
        [Dependency]
        public IDetalleEntradaProductosDAO detalleEntradaProductoDAO { get; set; }

        public void RegistrarEntradaProducto(EntradaProductoDTO entradaProducto)
        {
            Entity.EntradaProducto entradaProd1 = new EntradaProducto();

                entradaProd1.FechaEntrada = entradaProducto.FechaEntrada;
                entradaProd1.IdAlamacenero = entradaProducto.IdAlmacenero;
                entradaProd1.IdProveedor = entradaProducto.IdProvedor;
                entradaProd1.NroComprobante = entradaProducto.NroComprobante;
                entradaProd1.Comentario = entradaProducto.Comentario;

                foreach (var item in entradaProducto.DetalleEntrada)
                {
                    var detalle = new DetalleEntradaProducto();
                    detalle.IdProducto = item.IdProducto;
                    detalle.Cantidad = item.Cantidad;

                    entradaProd1.DetalleEntradaProductos.Add(detalle);
                }

                Context.EntradaProductos.Add(entradaProd1);
                Context.SaveChanges();
        }

        public EntradaProductoDTO GetAllFromEntradaByIdEntrada(Int32 idEntrada)
        {
            var query = from p in Context.EntradaProductos
                        where (p.IdEntrada.Equals(idEntrada))

                        join t in Context.Trabajadors on p.IdAlamacenero equals t.IdTrabajador
                        join pr in Context.Proveedors on p.IdProveedor equals pr.IdProvedor

                        select new EntradaProductoDTO
                        {
                            IdEntrada = p.IdEntrada,
                            FechaEntrada = p.FechaEntrada,
                            NroComprobante = p.NroComprobante,
                            Comentario = p.Comentario,

                            IdAlmacenero = p.IdAlamacenero,
                            NombreAlmacenero = t.Ape_Nomb,

                            IdProvedor = pr.IdProvedor,
                            NombreProvedor = pr.RazonSocial,
                        };

            var entradaProducto = query.SingleOrDefault();

            if (entradaProducto != null)
            {
                entradaProducto.DetalleEntrada = detalleEntradaProductoDAO.GetAllFromDetalleEntradaByIdEntrada(idEntrada);

            }
            return entradaProducto;
        }


        public List<EntradaProducto> GetAllFromEntradaProductoByCriterio(string criterio)
        {
            var query = from e in Context.EntradaProductos
                        select e;

            if (criterio != null)
            {
                query = query.Where(e => e.NroComprobante.ToUpper().StartsWith(criterio.ToUpper()) ||
                                        e.NroComprobante.Contains(criterio.ToUpper())

                    );
            }
            return query.OrderBy(e => e.IdEntrada).ToList();
        }
    }
}
